/* eslint-disable */
import axios from 'axios';
import type { AxiosResponse } from 'axios';
import { ElMessage } from 'element-plus'


const service = axios.create({
    baseURL: '/api',
    timeout: 5000,
});

// 添加请求拦截器设置Bearer头
service.interceptors.request.use(
    config => {
        // 从localStorage获取token
        const token = localStorage.getItem('token');
        if (token) {
            // 设置Authorization头
            config.headers.Authorization = `Bearer ${token}`;
        }
        return config;
    },
    error => {
        return Promise.reject(error);
    }
);

// 拦截器：处理响应数据结构
service.interceptors.response.use(
    <T>(response: AxiosResponse<Result<T>>) => {
        const result = response.data

        if (result.code === 200) {
            let data =  result.data as T; // 直接返回data属性

            // 如果需要对特定数据进行反序列化处理
            // 可以在这里添加逻辑
            if (typeof data === 'string') {
                try {
                    data = JSON.parse(data as unknown as string);
                } catch (e) {
                    // 如果解析失败，保持原数据
                    console.warn('JSON解析失败:', e);
                }
            }
            return data;
        } else {
            ElMessage.error(result.msg)
            return Promise.reject(new Error(result.msg))
        }
    },
    (error) => {
        // 处理401未授权错误
        if (error.response && error.response.status === 401) {
            localStorage.removeItem('token');
            ElMessage.error('登录已过期，请重新登录');
            // 可以添加重定向到登录页的逻辑
            // window.location.href = '/login';
        } else {
            console.error('Network Error:', error)
            ElMessage.error('网络请求失败，请稍后重试');
        }
        return Promise.reject(error)
    }
)

export default service